<?php
// +----------------------------------------------------------------------
// | HYYPHP [ WE CAN DO IT JUST HYYPHP ]
// +----------------------------------------------------------------------
// | Copyright (c) HanSheng All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: HanSheng <164897033@qq.com>
// +----------------------------------------------------------------------

namespace hyyphp\template;

use hyyphp\Log;

class Action {
    /**
     * 模板编译文件目录
     * @var string
     */
    public $runtime_dir = RUNTIME_PATH;
    /**
     * 模板变量集合
     * @var array
     */
    public $tpl_var = array();
    /**
     * 是否开启缓存
     * @var bool
     */
    public $caching = false;

    public function __construct() {
        $this->checkDir();
    }

    //检查目录是否建好
    private function checkDir() {
        if(!file_exists($this->runtime_dir.'templates')) {
            @mkdir($this->runtime_dir.'templates', 0777);
        }
        if(!file_exists($this->runtime_dir.'templates_c')) {
            @mkdir($this->runtime_dir.'templates_c', 0777);
        }

    }

    //模板变量注入方法
    public function assign($tpl_var, $var) {
        if(is_array($tpl_var)) {
            $this->tpl_var = array_merge($this->tpl_var, $tpl_var);
        }else {
            $this->tpl_var[$tpl_var] = $var;
        }
    }

    //文件编译
    public function display($file) {
        t('HYYPHP_COMPILE_TIME');
        //模板文件地址
        $tpl_file = APP_PATH . 'view/' . $file . '.html';
        $tpl_file = str_replace('\\', '/', $tpl_file);

        if(!file_exists($tpl_file)) {
            throw new \Exception ($tpl_file . ' 模板文件不存在！');
        }
        //编译文件
        $parse_file = $this->runtime_dir.'templates_c/' . md5($file) . '.php';

        //只有当编译文件不存在或者是模板文件被修改过了
        //才重新编译文件
        if(!file_exists($parse_file) || filemtime($parse_file) < filemtime($tpl_file)) {
            $compile = new Compile($tpl_file);
            $compile->parse($parse_file);
            Log::trace('DEBUG', '编译成功：'.$tpl_file);
        }


        t('HYYPHP_COMPILE_TIME', 0);

        //开启了缓存才加载缓存文件，否则直接加载编译文件
        if($this->caching) {
            if(!file_exists($this->runtime_dir.'cache')) {
                @mkdir($this->runtime_dir.'cache', 0777);
            }
            //缓存文件
            $cache_file = $this->runtime_dir . 'cache/' . md5($file) . '.html';
            //只有当缓存文件不存在，或者编译文件已被修改过
            //重新生成缓存文件
            if(!file_exists($cache_file) || filemtime($cache_file) < filemtime($parse_file)) {
                //引入缓存文件
                include $parse_file;
                //缓存内容
                $content = ob_get_clean();
                //生成缓存文件
                if(!file_put_contents($cache_file, $content)) {
                    exit('缓存文件生成出错！');
                }
            }
            //载入缓存文件
            include $cache_file;
        } else {
            //载入编译文件
            include $parse_file;
        }
    }


}